﻿//// 层序
//void Inint(Queue* queue) {
//	assert(queue);
//	queue->head = queue->tail = 0;
//	queue->size = 0;
//}
////推送算法
//void QueuePush(Queue* queue, BTNode* data) {
//	assert(queue);
//	Node* node = (Node*)malloc(sizeof(Node));
//	//无论是在节点内部的data或数据data都是以链链式结构存储的
//	node->data = data;
//	node->next = 0;
//	if (!queue->head) {
//		queue->head = queue->tail = node;
//	}
//	else {
//		queue->tail->next = node;
//		queue->tail = node;
//	}
//	queue->size++;
//}
//void QueuePop(Queue* queue) {
//	assert(queue && queue->head);
//	Node* node = queue->head->next;
//	free(queue->head);
//	queue->head = node;
//	queue->size--;
//}
//void BinaryTreeLevelOrder(BTNode* root) {
//	assert(root);
//	Queue* queue = (Queue*)malloc(sizeof(Queue));
//	Inint(queue);
//	QueuePush(queue, root);
//	while (queue->head) {
//		fprintf(stdout, "%c ", queue->head->data->_data);
//		if (root->_left) {
//			QueuePush(queue, root->_left);
//		}
//		if (root->_right) {
//			QueuePush(queue, root->_right);
//		}
//		QueuePop(queue);
//		if (queue->head) {
//			root = queue->head->data;
//		}
//	}
//	puts("");
//}
//// 判断二叉树是否是完全二叉树
//void QueueDestory(Queue* queue) {
//	while (queue->head) {
//		Node* node = queue->head->next;
//		free(queue->head);
//		queue->head = node;
//	}
//}
//int BinaryTreeComplete(BTNode* root) {
//	if (!root) {
//		return 0;
//	}
//	Queue* queue = (Queue*)malloc(sizeof(Queue));
//	Inint(queue);
//	QueuePush(queue, root);
//	while (queue->head->data) {
//		QueuePush(queue, root->_left);
//		QueuePush(queue, root->_right);
//		QueuePop(queue);
//		if (queue->head->data) {
//			root = queue->head->data;
//		}
//	}
//	while (queue->head) {
//		if (queue->head->data) {
//			QueueDestory(queue);
//			return 0;
//		}
//		QueuePop(queue);
//	}
//	return 1;
//}

//#include "Tree.h"
//int main() {
//	char a[] = "ABD##E#H##CF##G##";
//	int i = 0, * x = &i;
//	BTNode* root = BinaryTreeCreate(a, strlen(a), x);//将a数组以前序的方式插入二叉树中
//	BinaryTreePrevOrder(root);//前序输出
//	puts("");
//
//	i = BinaryTreeSize(root);// 二叉树节点个数
//	fprintf(stdout, "二叉树的节点数: %d\n", i);
//
//	i = BinaryTreeLeafSize(root);// 二叉树叶子节点个数
//	fprintf(stdout, "二叉树叶子节点的个数: %d\n", i);
//
//	i = BinaryTreeLevelKSize(root, 3);// 二叉树第3层节点个数
//	fprintf(stdout, "二叉树第3层节点的个数: %d\n", i);
//
//	BTNode* node = BinaryTreeFind(root, 'E');// 二叉树查找值为'E'的节点
//	if (!node) {
//		puts("并无此度");
//	}
//	else {
//		puts("存在此度");
//	}
//
//	BinaryTreeLevelOrder(root);// 层序遍历
//
//	 判断二叉树是否是完全二叉树
//	if (BinaryTreeComplete(root)) {
//		puts("完全二叉树");
//	}
//	else {
//		puts("不是完全二叉树");
//	}
//
//	BinaryTreeDestory(&root);//销毁二叉树
//	return 0;
//}